home *** CD-ROM | disk | FTP | other *** search
- ;; Hook.mut : Hook central
- ;; These routines let lots of routines share ME hooks. For example, if you
- ;; want foo to called from buffer-created-hook, then just
- ;; (register-hook BUFFER-CREATED-HOOK "foo") and every time
- ;; (buffer-created-hook) is called, (foo) will be called.
- ;; Notes:
- ;; DO NOT defun buffer-created-hook or other hooks! If you do, you'll
- ;; ruin the party for everybody.
- ;; Hooks not here:
- ;; modeline-hook : Needs to be handled differently. See modeline.mut.
- ;; key-pressed-hook : Slows things down too much. Your on your own.
- ;; I define some of own hooks: the "I" ones. These are subsets of
- ;; existing hooks that are called when a buffer is Interactive. I do
- ;; this to avoid doing a bunch of work when I don't need to.
- ;; C Durland 10/89 Public Domain
-
- (include me2.h)
-
- (list
- buffer-created-list
- Ibuffer-created-list ;; interactive buffer created
- file-read-list
- Ifile-read-list ;; interactive file read
- enter-ME-list
- leave-ME-list
- process-list
- )
-
- (defun
- register-hook (int hook-id)(string who-u-gonna-call)
- {
- (switch hook-id
- BUFFER-CREATED-HOOK (add-hook buffer-created-list who-u-gonna-call)
- IBUFFER-CREATED-HOOK (add-hook Ibuffer-created-list who-u-gonna-call)
- READ-FILE-HOOK (add-hook file-read-list who-u-gonna-call)
- IREAD-FILE-HOOK (add-hook Ifile-read-list who-u-gonna-call)
- ENTER-ME-HOOK (add-hook enter-ME-list who-u-gonna-call)
- LEAVE-ME-HOOK (add-hook leave-ME-list who-u-gonna-call)
- PROCESS-HOOK (add-hook process-list who-u-gonna-call)
- )
- }
- enter-ME-hook { (call-hooks enter-ME-list) }
- leave-ME-hook { (call-hooks leave-ME-list) }
- process-hook { (call-hooks process-list (push-args 0)) }
- buffer-created-hook
- {
- (call-hooks buffer-created-list)
- (if (!= 0 (bit-and BFInteractive (buffer-flags -1)))
- (call-hooks Ibuffer-created-list))
- }
- read-file-hook
- {
- (call-hooks file-read-list)
- (if (!= 0 (bit-and BFInteractive (buffer-flags -1)))
- (call-hooks Ifile-read-list))
- }
- )
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;; Gory Details ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defun
- call-hooks (list hook-list)(hook-args) HIDDEN
- {
- (int j z)
-
- (for { (j 0)(z (length-of hook-list)) } (!= j z) (+= j 1)
- (floc (extract-element hook-list j)(push-args 1))) ;; call the hook
- }
- add-hook (list hook-list) (string name) HIDDEN
- {
- (int j z)
-
- ;; Check to see if name is already registered
- (for { (j 0)(z (length-of hook-list)) } (!= j z) (+= j 1)
- (if (== name (extract-element hook-list j)) (done)))
- (insert-object hook-list 0 name) ;; put name in list
- }
- )
-